/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jpa.session;

import jpa.entities.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.JoinType;
import jpa.entities.ItemPedido;
import jpa.entities.Pedido;

/**
 *
 * @author carlos
 */
@Stateless
public class PedidoFacade extends AbstractFacade<Pedido> {

    @PersistenceContext(unitName = "LaCruz_v2PU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public PedidoFacade() {
        super(Pedido.class);
    }

    public List<Pedido> findAllGroup(int[] range) {
        javax.persistence.criteria.CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<Pedido> Pedido = cq.from(Pedido.class);
        javax.persistence.criteria.Expression<Long> Count = getEntityManager().getCriteriaBuilder().count(Pedido);
        javax.persistence.criteria.Expression Sum = getEntityManager().getCriteriaBuilder().sum(Pedido.get("itemPedidoCollection").get("produto").get("valorUnitario").as(Double.TYPE));


        List<javax.persistence.criteria.Predicate> predicateList = new ArrayList<javax.persistence.criteria.Predicate>();
        predicateList.add(cb.equal(Pedido.get("itemPedidoCollection").get("statusPedido"), "A"));

        javax.persistence.criteria.Predicate[] predicates = new javax.persistence.criteria.Predicate[predicateList.size()];

        cb.count(Pedido);
        cq.multiselect(Pedido.get("usuario"), Count,Sum).where(predicateList.toArray(predicates)).groupBy(Pedido.get("usuario"));


        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();

    }

    public List<Pedido> findPedidos(Object[] pedido) {
        javax.persistence.criteria.CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
        javax.persistence.criteria.CriteriaQuery<Pedido> query = builder.createQuery(Pedido.class);
        javax.persistence.criteria.Root<Pedido> Pedido = query.from(Pedido.class);


        List<javax.persistence.criteria.Predicate> predicateList = new ArrayList<javax.persistence.criteria.Predicate>();
        if (pedido != null) {
            final Usuario pedidos = (Usuario) pedido[0];
            predicateList.add(builder.equal(Pedido.get("usuario"), (Usuario) pedidos));

        }
        predicateList.add(builder.equal(Pedido.get("itemPedidoCollection").get("statusPedido"), "A"));

        javax.persistence.criteria.Predicate[] predicates = new javax.persistence.criteria.Predicate[predicateList.size()];
        query.where(predicateList.toArray(predicates));
        query.select(Pedido);

        return getEntityManager().createQuery(query).getResultList();

    }
}
